package org.moonlight.jvm.classfile.constant.info.dynamic;

import org.moonlight.jvm.classfile.ClassReader;
import org.moonlight.jvm.classfile.constant.ConstantInfo;

/**
 * CONSTANT_MethodType_info 结构表示方法句柄：
 *   CONSTANT_MethodType_info {
 *     u1 tag
 *     u1 reference_kind // reference_kind 项的值必须在 1 至 9 之间（包括 1 和 9），它决定了方法句柄的类型。
 *                       // 方法句柄类型的值表示方法句柄的字节码行为。
 *     u2 reference_index // reference_index 项的值必须是对常量池的有效索引
 *   }
 *
 * CONSTANT_MethodType_info、CONSTANT_MethodHandle_info、CONSTANT_InvokeDynamic_info
 * 它们是Java SE7才添加到class文件中的，目的是支持新增的 invokedynamic 指令。
 *
 * @author Moonlight
 * @createTime 2023/8/15 15:27
 **/
public class ConstantMethodHandleInfo implements ConstantInfo {

    private int refKind;
    private int refIdx;

    @Override
    public void readInfo(ClassReader reader) {
        this.refKind = reader.readUint8();
        this.refIdx = reader.readUint16();
    }

    @Override
    public int tag() {
        return ConstantInfo.CONSTANT_METHODHANDLE;
    }
}
